#!/usr/bin/env lua
--[[
Syntax/Dinge
 - Keine klammern für Blöcke, ein Block wird durch ein Statement begonnen und mit end beendet.
 - Es gibt kein case-statement
 - Alles ist wahr, außer nil und false.
 - Alle variablen sind global, wenn sie nicht als local gekennzeichnet sind
]]

-- Es gibt auch einzeilige Kommentare

foo = [[
Mehrzeilige strings funktionieren so ähnlich
]]

bar = [==[
Man kann sie auch "erweitern", so das man [[ sowas auch in strings machen kann]]
]==]


local buzz = 123.45
-- So funktionieren lokale variablen




if [truthy] then
	-- [truthy] muss ein Ausdruck der wahr ist sein. Das kann ein Wert(string o.ä.) sein.
	-- auch vergleiche funktionieren so, da 123 > 456 auch nur ein ausdruck ist, der zu true evaluiert.
       (bla bla bla)
end


while [truthy] do
        (bla bla bla)
	-- Eine schleige frühzeitig abbrechen:
	break
end


for [var]=[start], [end], [increment] do
	-- increment ist optional
        (bla bla bla)
end


for [var1], [var2] in [iterator] do
	-- Der iterator kann belibig viele variablen benutzen. Typischerweise verwendet man pairs oder ipairs um über tabellen zu iterieren.
        (bla bla bla)
end


do
	-- Ein leerer block! (Nützlich für scoping o.ä.)
        (bla bla bla)
end


repeat
	-- Das selbe wie while, nur das die bedingung am ende evaluiert wird
        (bla bla bla)
until [truthy]




function foo(parm1, parm2)
        (bla bla bla)
        return "Hello World!"
end


foo = function()
        (bla bla bla)
        return "Multiple", "return", "values"
end


function vararg(...)
        local args = {...}
end


function vararg2(parm1, parm2, ...)
        return parm1+parm2
end

